約 5,983,592 件
https://w.atwiki.jp/arduino/pages/48.html
Arduinoで簡易的なオシロスコープ的なことができます。 試してみる http //accrochages.drone.ws/en/node/90 これを元に作られたアプリを http //code.google.com/p/arduinoscope/ ここからダウンロードできます。 Arduinoに入れるスケッチ http //arduinoscope.googlecode.com/files/arduino_oscilliscope.pde オシロアプリ http //arduinoscope.googlecode.com/files/application.macosx.zip http //arduinoscope.googlecode.com/files/application.linux.zip http //arduinoscope.googlecode.com/files/application.windows.zip Arduinoで新規スケッチ作成し、arduino_oscilliscope.pdeをコピペし保存。実行。 オシロアプリを起動!で普通は動きそうだがだめだった。 Processingで実行 ウインドウのサイズとかチャンネル数とかを変えたいし。 Processingを入れる。http //www.processing.org/download/ 1.0.5 インストールしてなにかサンプルを実行してみる。 controlP5ライブラリを入れる。http //www.sojamo.de/libraries/controlP5/ 解凍して、[processingのSketchbookフォルダ]/libraries/controlP5となるように配置。 arduinoscope.pde オシロアプリのZIPの中にあるarduinoscope.pdeをコピーしてProcessingで実行する。 Fontの作成 Fontデータをを自分で作る必要がある。 http //labs.uechoco.com/blog/2008/02/processingvlw.html 好きなフォントデータを作ってソースのフォント名を直して再実行。 シリアル通信速度の変更 ArduinoのスケッチとProcessingのスケッチの中にある速度指定の値を2カ所書き換える。 デフォルトでは115200になっているが、このままだと信号の波形がガタガタだった。 38400まで落とすとなめらかになった。
https://w.atwiki.jp/arduino/pages/62.html
Chanさんの「赤外線リモコン制御モジュール」 http //elm-chan.org/fsw/irctrl/00index.html をArduinoのライブラリにしてみました。 ライブラリとして2つのファイルを配置してください。 libraries/IrCtrl/IrCtrl.cpp libraries/IrCtrl/IrCtrl.h Counter1とTimer2を使うのでArduino標準のPWMがいくつか使えなくなっているはずです。 サンプルスケッチ IrCtrlTest.pde #include Debounce.h #include IrCtrl.h int PIN_LED = 13; int PIN_IR_IN = 8; // PB0 ICP1 Counter1 int PIN_IR_OUT = 3; // PD3 OC2B Timer2 int PIN_BUTTON_1 = 2; Debounce button1 = Debounce(20, PIN_BUTTON_1); void setup() { Serial.begin(115200); pinMode(PIN_LED, OUTPUT); pinMode(PIN_BUTTON_1, INPUT); digitalWrite(PIN_BUTTON_1, HIGH); // pull-up pinMode(PIN_IR_OUT, OUTPUT); pinMode(PIN_IR_IN, INPUT); digitalWrite(PIN_IR_IN, HIGH); // pull-up IR_initialize(); Serial.println("IR remote control test program"); } void loop() { // digitalWrite(PIN_LED, !digitalRead(PIN_IR)); ir_recv_loop(); if(button1.update() !button1.read()){ if (IR_xmit(AEHA, (uint8_t*)"\xAA\x5A\x8F\x12\x14\xF1", 6*8)){ Serial.println("OK AQUOS VOLUME UP"); } } } void ir_recv_loop(void) { if(IrCtrl.state!=IR_RECVED){ return; } uint8_t d, i, l; uint16_t a; l = IrCtrl.len; switch (IrCtrl.fmt) {/* Which frame arrived? */ #if IR_USE_NEC case NEC /* NEC format data frame */ if (l == 32) {/* Only 32-bit frame is valid */ Serial.print("N "); Serial.print(IrCtrl.buff[0], HEX); Serial.print(" "); Serial.print(IrCtrl.buff[1], HEX); Serial.print(" "); Serial.print(IrCtrl.buff[2], HEX); Serial.print(" "); Serial.print(IrCtrl.buff[3], HEX); Serial.println(); } break; case NEC|REPT /* NEC repeat frame */ Serial.println("N repeat"); break; #endif #if IR_USE_AEHA case AEHA /* AEHA format data frame */ if ((l = 48) (l % 8 == 0)) {/* Only multiple of 8 bit frame is valid */ Serial.print("A"); l /= 8; for (i = 0; i l; i++){ Serial.print(" "); Serial.print(IrCtrl.buff[i], HEX); } Serial.println(); } break; case AEHA|REPT /* AEHA format repeat frame */ Serial.println("A repeat"); break; #endif #if IR_USE_SONY case SONY d = IrCtrl.buff[0]; a = ((uint16_t)IrCtrl.buff[2] 9) + ((uint16_t)IrCtrl.buff[1] 1) + ((d 0x80) ? 1 0); d = 0x7F; switch (l) {/* Only 12, 15 or 20 bit frames are valid */ case 12 //xprintf(PSTR("S12 %u %u\n"), d, a 0x1F); Serial.print("S12 "); Serial.print(d, HEX); Serial.print(" "); Serial.print(a 0x1F, HEX); Serial.println(); break; case 15 //xprintf(PSTR("S15 %u %u\n"), d, a 0xFF); Serial.print("S15 "); Serial.print(d, HEX); Serial.print(" "); Serial.print(a 0xFF, HEX); Serial.println(); break; case 20 //xprintf(PSTR("S20 %u %u\n"), d, a 0x1FFF); Serial.print("S20 "); Serial.print(d, HEX); Serial.print(" "); Serial.print(a 0x1FFF, HEX); Serial.println(); break; } break; #endif } IrCtrl.state = IR_IDLE;/* Ready to receive next frame */ }
https://w.atwiki.jp/arduino/pages/21.html
無線通信するには? 500円微弱無線モジュール http //strawberry-linux.com/catalog/items?code=82003 http //strawberry-linux.com/catalog/items?code=82004 http //strawberry-linux.com/catalog/items?code=82005 送信受信で各500円。 ノイズが結構あるらしいのでソフトで信頼性を確保する必要があるんだろう。 XBee http //www.alpha-denshi-shop.com/Item/Item_DigiModule.html 数千円するが、これならしっかり安定した通信ができるらしい。 どれを買えばいいのかよくわからない。 消費電力について 例えば、温度センサーモジュールを作って、Arduino/AVR本体はスリープ使って超低消費電力で 5分ごとにデータ送信する。ボタン電池でどれだけ持つんだろうか。
https://w.atwiki.jp/arduino/pages/32.html
3軸加速度センサ 3軸加速度センサモジュール KXP84−2050 http //akizukidenshi.com/catalog/g/gI-02347/ 1200円 I2C/SPI/アナログ出力 http //www.kionix.com/accelerometers/accelerometer-KXP84.html データシート http //www.kionix.com/Product-Specs/KXP84-2050%20Specifications%20Rev%202.pdf アプリケーションノート http //www.kionix.com/App-Notes/AN008%20Getting%20Started%20with%20the%20KXP84.pdf 3軸加速度センサモジュール KXM52−1050 http //akizukidenshi.com/catalog/g/gI-01425/ 1000円 アナログ出力のみ AE-KXP84(KXP84−2050) ピンリスト (データシートのチップのピン番号と秋月基板の外部端子番号は違うので注意) 名前 秋月外部端子番号 チップのピン番号 機能 Vdd 1 2 GND 2 1 MOT 3 3 Motion interrupt FF 4 4 Free-fall interrupt SCL/SCLK 5 12 IO_Vdd 6 13 SDA_SDO 7 11 RESET 8 8 ADDRO/SDI 9 10 CS 10 9 X_OUT 11 5 X Y_OUT 12 6 Y Z_OUT 13 7 Z --- 14 14 NC(接続しない) 半田付け 写真のように付属のメスのコネクタを半田付けすればArduinoやブレッドボードとジャンパワイヤで接続できる。 アナログ 配線する。 Arduino AE-KXP84 5V 1 GND 2 Analog0 11 Analog1 12 Analog2 13 これだけでOK。 本格的にArduino/簡易オシロスコープを使えば波形が見れます。 SPI I2C 地震計を作れるか? (TODO) 3軸をRGBに割り当ててみる (TODO) 3軸加速度シンセサイザー (TODO)
https://w.atwiki.jp/arduino/pages/24.html
プルアップの回路 http //www.arduino.cc/en/Tutorial/Button imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 スイッチがOFFの時はAの電圧がHIGHになる。 スイッチがONの時はAの電圧がLOWになる。 プルダウンの回路 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 スイッチがOFFの時はAの電圧がLOWになる。 スイッチがONの時はAの電圧がHIGHになる。 消費電力 通常状態でスイッチがOFFの場合はプルダウンの回路の方が消費電力が少ない。 通常状態でスイッチがONの場合はプルアップの回路の方が消費電力が少ない。 まあ気にすることはないと思うけど。 AVR内蔵のプルアップ抵抗を使える? http //nekosan0.bake-neko.net/structure_digital_port.html によると、 digitalWrite(pin, HIGH); でプルアップされるようです。 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 抵抗1つ省略できるので便利。 抵抗値は? プルアップの場合 mega168のデータシートによるとAVR内蔵のプルアップ抵抗は20K-50Kだそうだ。 電圧を測定する部分の抵抗値(=A)より十分小さい スイッチがONになってGNDに接続されても電流が多すぎない という抵抗値である必要があるわけだから100Kではたぶん大きすぎ、1Kでは5Vで5mA。 1Kから20Kぐらいの間で適当に選べばよさそうかな。 プルダウンの場合 スイッチがONになってGNDに接続されても電流が多すぎない 十分しっかりGNDに引っ張れる値 と考えると、何オーム? 内蔵プルアップでのスケッチ int ledPin = 13; int inputPin = 2; void setup() { pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); digitalWrite(inputPin, HIGH); // pull-up } void loop(){ int in = digitalRead(inputPin); if(in==HIGH){ digitalWrite(ledPin, LOW); //LED OFF } else{ digitalWrite(ledPin, HIGH); //LED ON } } チャタリング防止 チャタリング防止のライブラリがある。 http //www.arduino.cc/playground/Code/Debounce zipをダウンロードしてarduinoのインストール先のhardware/libraries/Debounceに展開する。 #include Debounce.h // http //www.arduino.cc/playground/Code/Debounce int SW_YELLOW = 3; int SW_GREEN = 2; Debounce sw_yellow = Debounce(20, SW_YELLOW); Debounce sw_green = Debounce(20, SW_GREEN); void setup() { Serial.begin(9600); pinMode(SW_YELLOW, INPUT); pinMode(SW_GREEN, INPUT); digitalWrite(SW_YELLOW, HIGH); // pull-up digitalWrite(SW_GREEN, HIGH); // pull-up } void loop(){ if(sw_yellow.update() sw_yellow.read()==LOW) { yellow_count++; Serial.print("yellow_count="); Serial.println(yellow_count); } if(sw_green.update() sw_green.read()==LOW) { // digitalRead(SW_GREEN)==LOW green_count++; Serial.print("green_count="); Serial.println(green_count); } }
https://w.atwiki.jp/arduino/pages/25.html
PCと通信 http //www.musashinodenpa.com/arduino/ref/index.php?f=0 pos=2824 デバッグで便利。 int ledPin = 13; int inputPin = 2; int prevIn = HIGH; void setup() { pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); digitalWrite(inputPin, HIGH); // pull-up Serial.begin(19200); Serial.println("hello??"); // "hello??" Serial.println(79, DEC); // "79" Serial.println(79, HEX); // "4F" Serial.println(79, OCT); // "117" Serial.println(79, BIN); // "1001111" Serial.println(1234); // "1234" } void loop(){ int in = digitalRead(inputPin); if(in==HIGH){ digitalWrite(ledPin, LOW); //LED OFF } else{ digitalWrite(ledPin, HIGH); //LED ON } if(prevIn!=in){ Serial.print(millis()); Serial.print(" "); Serial.println(in); } prevIn = in; }
https://w.atwiki.jp/arduino/pages/34.html
計画 朝になったら自動でカーテンを開ける目覚まし時計を作りたい。 カーテンの端っこにひもを引っかけて朝になったらタイマーが作動してひもを巻き取りカーテンが開くという仕組み。 材料 Arduino2009 モータードライバ BD6211F ←いただきもの 6速ギヤボックスHE リアルタイムクロック ブレッドボード ひも&フック(カーテンを引っ張る) 円柱ゴム(ひもを巻き取る) 木の板&ねじ 抵抗とかコンデンサとか配線材とか 消費電流 RE-260 http //www.mabuchi-motor.co.jp/motorize/branch/b_0100.html 適正電圧適正負荷で700mA 負荷によって変わるだろうから動作させながら実測する! 6速ギヤボックスHE 広いギヤ比に組み替えられるのでとりあえずこれにした。 クラッチギアが付いているので大きい負荷がかかっても少し安心。 完成品は mega88 Arduino内蔵クロックで動かす。 過電流で電源を止めるやつをつける。ポリスイッチ? 電源 開発時はUSB 5V ACアダプタ 5V or 3V http //www.switch-science.com/trac/wiki/BD62xx-Basic モーターの定格電圧が信号系(マイコン)の電源電圧よりも低い場合は困ってしまいます。 モーターによっては、PWMで一定のデューティよりも上げないように注意すれば大丈夫な場合があります。 arduinoは3Vで動くのか? モータとArduinoの電源が同じでOK? リアルタイムクロック 秋月の時計IC バッテリバックアップしたい。 ユーザインターフェイス 正回転/逆回転ボタン タイマー時刻の設定/ロータリエンコーダ? 7セグ時計表示 巻き取り終了の検出 マイクでクラッチの音? 一定の秒数の作動でよい? 製作 (1)ざっと組み立て ギアボックス 巻き取り部取り付け ギアボックス&ブレッドボードを板に固定 Arduinoを固定 モータドライバにピン取り付け (2)モータードライバの実験(2009/4/18) 正転/逆転を実験 スピード&パワーを確認 消費電流を確認 スイッチサイエンスさんのスケッチをちょっと改造で動作OK。 http //www.switch-science.com/trac/wiki/BD62xx-Basic int FIN = 5; int RIN = 6; int LED = 13; int OFFSET = 0.7 * 256 / 5; // analogに255を出したら5V = 0.7V int MAX = 3.0 * 256 / 5 - OFFSET; // RE-260なので3V 3.0V-0.7V = 2.7V int degree10 = 0; int i; void setup() { Serial.begin(300); pinMode(FIN, OUTPUT); pinMode(RIN, OUTPUT); pinMode(LED, OUTPUT); for(i=0; i 5; i++){ digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } } void loop() { delay(10); degree10 += 3; degree10 %= 3600; long v = int(sin(degree10 * 2 * PI / 360 /10) * MAX); Serial.println(v); if (v 0) { analogWrite(FIN, v + OFFSET); // v(0V..2.7V) OFFSET(=0.7V) なので 0.7V..3.0V analogWrite(RIN, 0); } else if (v 0) { analogWrite(FIN, 0); analogWrite(RIN, OFFSET - v); // v(-0V..-2.7V) OFFSET(=0.7V) なので 0.7V..3.0V } else { analogWrite(FIN, 255); analogWrite(RIN, 255); } } 正回転・逆回転をなめらかに繰り返す。 OFFSETは回転開始の最低電圧。 正 0.7V = 0.8V = ... = 2.9V = 3.0V = 2.9V = ... 0.7V 逆 0.7V = 0.8V = ... = 2.9V = 3.0V = 2.9V = ... 0.7V を繰り返す。 ノイズ? たぶんモーターからのノイズのせいでシリアル通信が途中でとぎれてしまう。 まともにデバッグできないと困るので対策が必要かもしれない。 http //www.picfun.com/motorframe.html モーターの端子と金属ケースの間にコンデンサをいれるといいらしい。 (3)リアルタイムクロック確認(2009/4/19) http //nekosan0.bake-neko.net/connection_rtc.html nekosanのコードでOK。 よく考えたら毎日同じ時間に作動させる必要はなくて、「6時間後に作動」でいいわけだからRTCいらないや。 プログラムも簡単だ。内蔵RCで誤差はどれぐらいか?外部クリスタルつけたら誤差はどれくらい? (4)時計表示(2009/4/19) 7セグ2桁で作動までの残り時間を出せばいい。上の桁が時間、下の桁が10分単位で十分。 いや、もっと簡単にLEDの点滅回数でいい。5回点滅なら5時間。 (5)モーターから音を出す。 普通にモーターを回すときでもPWMの周波数で微妙に音が出てしまう。 てことは、適当にメロディーになるようにモーターに信号を与えたら・・・ 成功! スピーカーなしでBEEP音によるフィードバックが可能になった。 ArduinoのPWM周波数 http //www.musashinodenpa.com/arduino/ref/index.php?f=0 pos=1921 によると PWM信号の周波数は約490Hzです。 http //www.arduino.cc/en/Tutorial/PWM には Arduino s PWM frequency at about 500Hz とある。 しかし、http //www.rohm.co.jp/products/databook/motor/pdf/bd621x_series-j.pdf には 20k〜100kHz を入力しなさいとある。 とりあえず完成 黄色ボタンを押すたびに、「ひも出し」「ひも巻き取り」「停止」 緑ボタンはタイマー時間設定。1時間単位。押すたびにモーターから音を出して操作を確認できる。 タイマー作動後は小鳥のさえずりっぽい音を出してさわやかに目覚める。 /* Curtains Timer */ #include Debounce.h // http //www.arduino.cc/playground/Code/Debounce int FIN = 5; int RIN = 6; int LED = 13; int SW_YELLOW = 3; int SW_GREEN = 2; Debounce sw_yellow = Debounce(20, SW_YELLOW); Debounce sw_green = Debounce(20, SW_GREEN); int motorMode = 0; // 0 STOP,1 right,2 left int timerMode = 0; int timerHour = 0; // 0 0FF, 1 1h ... 12 12h int ledWait = 0; // blink interval. unsigned long lastPushedMs = 0; unsigned long alarmStartMs = 0; unsigned long alarmStopMs = 0; unsigned long motorStopMs = 0; unsigned long MOTOR_RUN_DURATION_MS = 60000; unsigned long SNOOZE_MS = 180000; unsigned long WAIT_MS_PER_PUSH = 3600000; void setup() { int i; Serial.begin(9600); pinMode(FIN, OUTPUT); pinMode(RIN, OUTPUT); pinMode(SW_YELLOW, INPUT); pinMode(SW_GREEN, INPUT); digitalWrite(SW_YELLOW, HIGH); // pull-up digitalWrite(SW_GREEN, HIGH); // pull-up // boot blink sound!! for(i=0; i 3000; i++){ analogWrite(FIN, 255*1/5); analogWrite(RIN, 0); delayMicroseconds(-i/10+350); analogWrite(FIN, 0); analogWrite(RIN, 255*1/5); delayMicroseconds(-i/10+350); #define LED_WAIT 300 if(i%LED_WAIT==0){ if(i/LED_WAIT % 2 == 0){ digitalWrite(LED, HIGH); }else{ digitalWrite(LED, LOW); } } } } void loop(){ motor_loop(); timer_loop(); } void motor_loop() { if(sw_yellow.update() sw_yellow.read()==LOW) { motorMode = (motorMode+1) % 3; motorStopMs = millis() + MOTOR_RUN_DURATION_MS; } switch(motorMode){ case 1 analogWrite(FIN, 255*3/5); analogWrite(RIN, 0); break; case 2 analogWrite(FIN, 0); analogWrite(RIN, 255*3/5); break; default analogWrite(FIN, 0); analogWrite(RIN, 0); break; } if((motorStopMs!=0) (motorStopMs millis())){ motorMode = 0; motorStopMs = 0; } } void timer_loop(){ int i; int pushed = 0; if(sw_green.update() sw_green.read()==LOW){ pushed = 1; lastPushedMs = millis(); } if(timerMode==0){ // nop ledWait = 300; if(pushed){ motorBeep(100, 100); motorBeep(150, 100); motorBeep(200, 100); timerMode = 1; } }else if(timerMode==1){ // setting if(pushed){ timerHour = (timerHour+1)%13; int beepDelay = 600; for(i=0; i timerHour; i++){ beepDelay = beepDelay*20/23; }; motorBeep(beepDelay, 100); if(timerHour==0){ delay(50); motorBeep(beepDelay, 100); } //Serial.println(timerHour); } if((1 =timerHour) (lastPushedMs+10000 millis())){ int beepDelay = 600*20/23; for(i=0; i timerHour; i++){ beepDelay = beepDelay*20/23; motorBeep(beepDelay, 100); delay(100); } alarmStartMs = millis() + timerHour*WAIT_MS_PER_PUSH; //Serial.println(timerHour); timerMode = 2; // goto waiting } ledWait = 0; }else if(timerMode==2){ // waiting ledWait = 2000; if(alarmStartMs millis()){ for(i=0; i 10; i++){ delay(50); motorBeep(100, 100); } alarmStopMs = millis() + MOTOR_RUN_DURATION_MS; motorStopMs = 0; motorMode = 2; timerMode = 3; // goto alarm } //if(millis()%1000==0){ Serial.println(alarmStartMs-millis()); } }else if(timerMode==3){ // alarm!! ledWait = 100; if(alarmStopMs millis()){ for(i=0; i 3; i++){ delay(50); motorBeep(600, 100); } motorMode = 0; timerMode = 4; // goto stop } //if(millis()%1000==0){ Serial.println(alarmStopMs-millis()); } }else if(timerMode==4){ // stop. ledWait = 4000; if(pushed){ motorBeep(700, 500); } if((millis()%SNOOZE_MS)==0){ for(i=10+random(10); 0 =i; i--){ cheep(10+random(50), 100+random(80), 10+random(10), 100+random(300)); } } } // LED 0 OFF, 1+ Nms blink digitalWrite(LED, LOW); if(0 ledWait (millis()/((ledWait+1)/2)%2)==0){ digitalWrite(LED, HIGH); } } // beep from motor void motorBeep(int beepDelay, int lenMs) { digitalWrite(LED, HIGH); unsigned long breakMs = millis()+lenMs; for(;;){ analogWrite(FIN, 255*1/5); analogWrite(RIN, 0); delayMicroseconds(beepDelay); analogWrite(FIN, 0); analogWrite(RIN, 255*1/5); delayMicroseconds(beepDelay); if(breakMs millis()){ break; } } analogWrite(FIN, 0); analogWrite(RIN, 0); digitalWrite(LED, LOW); } // a cheeping little bird void cheep(int start, int end, int sped, int dely) { int i; for(i=start; i end; i+=sped){ motorBeep(i, 10); } delay(dely); } (6)Arduino mega88 (TODO) Arduino2009は他の実験でも使いたいので格安「Arduino mega88 250円」で置き換える。
https://w.atwiki.jp/soscomp/pages/215.html
LCDの足のH/LをArduinoで検出してLaFoneraにシリアル通信で投げるという最高に頭悪そうな発想で造るNTPサーバ。 今お金無いんで着手すんのは3月入ってからになりそう。 電波時計500円くらい Arduino3000円くらい LaFonera2000円くらい 合計5500円くらい 理論上、5500円で電波時計NTPサーバが作れることになる。 100円ショップのケースに入れたら5600円、タカチのオーダーメイドのケースに入れても25500円。 これは安い。 受信部はここを参考にするとよい。http //okamerin.com/nc/title/radio_clock_study_2011.htm -- 先駆者 (2011-06-05 16 25 37) 名前 コメント このページへのアクセス数 total - today - yesterday - このページのタグ一覧
https://w.atwiki.jp/traino/pages/15.html
arduinoは、マイコン統合開発環境と呼ばれます。 くわしくは、こちらです。 http //ja.wikipedia.org/wiki/Arduino もう少しわかりやすく説明すると、「マイコンの動作(ソフトウエア)をパソコンで作ってダウンロードするしくみ」といえます。 なお、パソコンで入力するソフトウエアは、スケッチと呼びます。スケッチは、パソコンで処理(コンパイル)されたあとUSBケーブルなどでarduinoマイコンのメモリに転送されます。一度転送したプログラムはパソコンから切り離しても、また電源を切ってもきえることはありません。
https://w.atwiki.jp/wallguy/pages/168.html
イーサネット Xerox社とDEC社(現Hewlett Packard社)が考案したLAN規格。 ⇒携帯用語集へ